from time import sleep
from pages.pages_abstract import PageAbstract
from utils.read_config import ReadConfig


class LoginLocateEle(PageAbstract):
    """登录页面 元素定位层"""
    def __init__(self):
        super().__init__()
        ip = ReadConfig.read_config_by_key("config.yml", "host")["test"]
        self.driver.get(f"{ip}/user/login.html")

    def loca_phone_input(self):
        """
        定位 手机账号输入框元素
        :return: 手机账号输入框对象
        """
        return self.locate_ele_by_id("txtUName")

    def loca_password_input(self):
        """
        定位 密码输入框元素
        :return: 密码输入框对象
        """
        return self.locate_ele_by_id("txtPassword")

    def loca_auto_login_input(self):
        """
        定位 自动登录勾选框元素
        :return: 自动登录勾选框对象
        """
        return self.locate_ele_by_id("autoLogin")

    def loca_login_button(self):
        """
        定位 登录按钮元素
        :return: 登录按钮对象
        """
        return self.locate_ele_by_id("btnLogin")

    def loca_register_a(self):
        """
        定位 注册按钮元素
        :return: 注册按钮对象
        """
        return self.locate_ele_by_class_name("btn_ora_white")

    def loca_tips_span(self):
        """
        定位 登录错误的提示信息元素
        :return: 登录错误提示信息对象
        """
        return self.locate_ele_by_id("LabErr")


class LoginOperate(LoginLocateEle):
    """登录页面 元素操作层"""
    def __init__(self):
        super().__init__()

    def send_phone_num(self, phone_num):
        """手机输入框 输入操作"""
        self.loca_phone_input().send_keys(phone_num)

    def send_password(self, password):
        """密码输入框 输入操作"""
        self.loca_password_input().send_keys(password)

    def click_auto_login(self):
        """自动登录勾选框 点击操作"""
        self.loca_auto_login_input().click()

    def click_login(self):
        """登录按钮 点击操作"""
        self.loca_login_button().click()

    def click_register(self):
        """注册按钮 点击操作"""
        self.loca_register_a().click()

    def get_actual_result_by_page_title(self):
        """根据页面标题获取实际结果"""
        return self.driver.title

    def get_actual_result_by_tips(self):
        """根据登录提示获取实际结果"""
        return self.loca_tips_span().text


class LoginBussiness(LoginOperate):
    """登录页面 业务层"""
    def __init__(self):
        super().__init__()

    def login(self, phone_num, password, is_auto_login):
        """登录业务"""
        actual_result = ""
        try:
            self.logger.info("进行登录业务操作...")
            # 输入手机号
            self.send_phone_num(phone_num)
            # 输入密码
            self.send_password(password)
            # 判断是否勾选自动登录勾选框
            if is_auto_login.lower() == "true":
                self.click_auto_login()
            # 点击登录
            self.click_login()
            sleep(1)

            # 实际结果
            actual_result = self.get_actual_result_by_tips() or self.get_actual_result_by_page_title()

        except Exception as e:
            self.logger.error("test_1搜索购买功能测试出现异常 不通过", e)
        return actual_result

    def register(self):
        """注册业务"""
        self.click_register()
        sleep(1)
        # 页面标题 实际结果
        actual_result = self.get_actual_result_by_page_title()
        return actual_result


if __name__ == "__main__":
    print(LoginBussiness().login("17820575533", "aaa123321", False))
